﻿using System.Collections.Generic;

namespace DoNet.TenPay
{
    public interface IQueryOrderBase
    {
        /// <summary>
        /// 商户订单号
        /// </summary>
        string out_trade_no { get; set; }
        /// <summary>
        /// 微信支付订单号
        /// </summary>
        string transaction_id { get; set; }
        /// <summary>
        /// 交易类型 交易类型，枚举值： JSAPI：公众号支付 NATIVE：扫码支付 APP：APP支付 MICROPAY：付款码支付 MWEB：H5支付 FACEPAY：刷脸支付
        /// </summary>
        string trade_type { get; set; }
        /// <summary>
        /// 交易状态
        /// 交易状态，枚举值： SUCCESS：支付成功 REFUND：转入退款 NOTPAY：未支付 CLOSED：已关闭 REVOKED：已撤销（仅付款码支付会返回） USERPAYING：用户支付中（仅付款码支付会返回） PAYERROR：支付失败（仅付款码支付会返回）
        /// </summary>
        string trade_state { get; set; }
        /// <summary>
        /// 交易状态描述
        /// </summary>
        string trade_state_desc { get; set; }
        /// <summary>
        /// 付款银行
        /// </summary>
        string bank_type { get; set; }
        /// <summary>
        /// 附加数据
        /// 附加数据，在查询API和支付通知中原样返回，可作为自定义参数使用，实际情况下只有支付完成状态才会返回该字段。
        /// 示例值：自定义数据
        /// </summary>
        string attach { get; set; }
        /// <summary>
        /// 支付完成时间
        /// 支付完成时间，遵循rfc3339标准格式，格式为yyyy-MM-DDTHH:mm:ss+TIMEZONE，yyyy-MM-DD表示年月日，T出现在字符串中，表示time元素的开头，HH:mm:ss表示时分秒，TIMEZONE表示时区（+08:00表示东八区时间，领先UTC 8小时，即北京时间）。例如：2015-05-20T13:29:35+08:00表示，北京时间2015年5月20日 13点29分35秒。
        /// 示例值：2018-06-08T10:34:56+08:00
        /// </summary>
        string success_time { get; set; }
        /// <summary>
        /// 支付者
        /// </summary>
        payer_v3 payer { get; set; }
        /// <summary>
        /// 订单金额
        /// </summary>
        amount_v3 amount { get; set; }
        /// <summary>
        /// 场景信息
        /// </summary>
        scene_info_v3 scene_info { get; set; }
        /// <summary>
        /// 优惠功能
        /// </summary>
        List<promotion_detail_v3> promotion_detail { get; set; }
    }
    public class QueryOrderBase : IQueryOrderBase
    {
        /// <summary>
        /// 商户订单号
        /// </summary>
        public string out_trade_no { get; set; }
        /// <summary>
        /// 微信支付订单号
        /// </summary>
        public string transaction_id { get; set; }
        /// <summary>
        /// 交易类型 交易类型，枚举值： JSAPI：公众号支付 NATIVE：扫码支付 APP：APP支付 MICROPAY：付款码支付 MWEB：H5支付 FACEPAY：刷脸支付
        /// </summary>
        public string trade_type { get; set; }
        /// <summary>
        /// 交易状态
        /// 交易状态，枚举值： SUCCESS：支付成功 REFUND：转入退款 NOTPAY：未支付 CLOSED：已关闭 REVOKED：已撤销（仅付款码支付会返回） USERPAYING：用户支付中（仅付款码支付会返回） PAYERROR：支付失败（仅付款码支付会返回）
        /// </summary>
        public string trade_state { get; set; }
        /// <summary>
        /// 交易状态描述
        /// </summary>
        public string trade_state_desc { get; set; }
        /// <summary>
        /// 付款银行
        /// </summary>
        public string bank_type { get; set; }
        /// <summary>
        /// 附加数据
        /// 附加数据，在查询API和支付通知中原样返回，可作为自定义参数使用，实际情况下只有支付完成状态才会返回该字段。
        /// 示例值：自定义数据
        /// </summary>
        public string attach { get; set; }
        /// <summary>
        /// 支付完成时间
        /// 支付完成时间，遵循rfc3339标准格式，格式为yyyy-MM-DDTHH:mm:ss+TIMEZONE，yyyy-MM-DD表示年月日，T出现在字符串中，表示time元素的开头，HH:mm:ss表示时分秒，TIMEZONE表示时区（+08:00表示东八区时间，领先UTC 8小时，即北京时间）。例如：2015-05-20T13:29:35+08:00表示，北京时间2015年5月20日 13点29分35秒。
        /// 示例值：2018-06-08T10:34:56+08:00
        /// </summary>
        public string success_time { get; set; }
        /// <summary>
        /// 支付者
        /// </summary>
        public payer_v3 payer { get; set; }
        /// <summary>
        /// 订单金额
        /// </summary>
        public amount_v3 amount { get; set; }
        /// <summary>
        /// 场景信息
        /// </summary>
        public scene_info_v3 scene_info { get; set; }
        /// <summary>
        /// 优惠功能
        /// </summary>
        public List<promotion_detail_v3> promotion_detail { get; set; }
    }

    /// <summary>
    /// 查询订单接口返回结果 
    /// 商户和服务商 返回的字段不一致
    /// 商户 返回 appid mchid openid
    /// </summary>
    public class QueryOrderReseult : QueryOrderBase
    {
        /// <summary>
        /// 应用ID  直连商户申请的公众号或移动应用appid。  示例值：wxd678efh567hg6787
        /// </summary>
        public string appid { get; set; }
        /// <summary>
        /// 直连商户号 直连商户的商户号，由微信支付生成并下发。 示例值：1230000109
        /// </summary>
        public string mchid { get; set; }
    }

    /// <summary>
    /// 服务商 返回 sp_appid sp_mchid sub_appid sub_mchid sp_openid sub_openid
    /// </summary>
    public class SpQueryOrderReseult : QueryOrderBase
    {
        /// <summary>
        /// 服务商应用ID
        /// </summary>
        public string sp_appid { get; set; }
        /// <summary>
        /// 服务商户号
        /// </summary>
        public string sp_mchid { get; set; }
        /// <summary>
        /// 子商户应用ID
        /// </summary>
        public string sub_appid { get; set; }
        /// <summary>
        /// 子商户号
        /// </summary>
        public string sub_mchid { get; set; }
    }
}
